﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;
using System.IO;

namespace DiaryPlanner
{
    public partial class AlbumAddPhoto : Form
    {
        Album thisAlbumObject;
        String fileDir="";//file directory
        

        public AlbumAddPhoto(Album ab)
        {
            
            thisAlbumObject = ab;
            InitializeComponent();
            newDate.Text = System.DateTime.Now.ToString(); //현재 시간            
            skinSet();
        }
        public void skinSet()
        {
            string skin = UserProfile.Instance().setting;
            if (skin == "b")
            {
                this.BackColor = System.Drawing.Color.PaleTurquoise;

            }
            else if (skin == "c")
            {
                this.BackColor = System.Drawing.Color.LawnGreen;
            }
            else if (skin == "d")
            {
                this.BackColor = System.Drawing.Color.MistyRose;

            }
            else
            { //skin=="a"
                this.BackColor = System.Drawing.SystemColors.ControlLight;

            }
        }

        private void button1_Click(object sender, EventArgs e) //사진 추가 버튼
        {
            openFileDialog1.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png;)|*.jpg; *.jpeg; *.gif; *.bmp; *.png;";
            DialogResult d = openFileDialog1.ShowDialog();
            
            if (d != DialogResult.Cancel)
            {
                fileDir = openFileDialog1.FileName;
                photoMemo.Text = Path.GetFileName(fileDir);

                newPhoto.Image = Image.FromFile(fileDir);
             
            }            
        }

        private void button2_Click(object sender, EventArgs e)//취소 버튼
        {
            this.Close();
        }

        private void button3_Click(object sender, EventArgs e)//추가 버튼
        {

            

            //사진을 등록하지 않음
            if(fileDir==""){
                return;            
            }


            AlbumPhoto ap = new AlbumPhoto(thisAlbumObject);
            //사진 저장            
            //파일명
            String fname = "AP" +"_"+ System.DateTime.Now.Year.ToString() + "_" +
                System.DateTime.Now.Month.ToString()+"_"+
                System.DateTime.Now.Day.ToString() + "_" +
                    System.DateTime.Now.Hour.ToString() + "_" +
                    System.DateTime.Now.Minute.ToString() + "_" +
                    System.DateTime.Now.Second.ToString() +"_" +
                Path.GetFileName(fileDir);
             
            File.Copy(fileDir, Application.StartupPath + "\\UserImage\\" + UserProfile.Instance().userId + "\\Album\\" + thisAlbumObject.nowFolder.realName + "\\" + fname);
            ap.photoName = fname;
            //이미지
            ap.Size = new Size(100, 100);
            ap.Image = Image.FromFile(Application.StartupPath + "\\UserImage\\" + UserProfile.Instance().userId + "\\Album\\" + thisAlbumObject.nowFolder.realName + "\\" + fname);
            ap.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;            
            
            ap.photoMemo = photoMemo.Text;//메모
            thisAlbumObject.nowFolder.PhotoList.Add(ap);//현재 폴더의 photoList에 사진 추가
            
            thisAlbumObject.viewAllPhoto();

            save_db(ap.photoName, ap.photoMemo, thisAlbumObject.nowFolder.realName);

            //사진 등록
            this.Close();
        }

        //Pname 사진파일 실제이름
        //memoText 메모내용
        //Fname 폴더 실제이름
        private void save_db(string picname, string memo, string fname)
        {

            try //예외처리문
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                        + "data source = "  //데이터 소스=(경로입력하라는거)
                                        + Application.StartupPath ///상대경로 읽어옴
                                        + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [photo]";//photo테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "photo"); //DS라는 데이터셋에 새로운 photo 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["photo"];//photo테이블을 불러와 aTable을 새로 생성해서 저장
                DataRow newRow = aTable.NewRow();


                newRow["Pname"] = picname;
                newRow["memoText"] = memo;
                newRow["Fname"] = fname;
                newRow["id"] = UserProfile.Instance().userId;

                aTable.Rows.Add(newRow);

                DBAdapter.Update(DS, "photo");
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }


        }
    }
}
